#include "HechizoHieloThreadSingle.h"

HechizoHieloThreadSingle::HechizoHieloThreadSingle(Personaje* agresor, Casilla* casillaAtacada, Escenario* escenario){
		this->agresor = agresor;
		this->casillaAtacada = casillaAtacada;
		this->escenario = escenario;
	}

HechizoHieloThreadSingle::~HechizoHieloThreadSingle(){

}

void HechizoHieloThreadSingle::run() {

	cout<<"HECHIZO HIELO: Corro hechizo hielo"<<endl;

	int rango = RANGO_HIELO;

	list<Personaje*> personajesCongelados;

	for(int i = casillaAtacada->getX() - rango; i <= casillaAtacada->getX() + rango; i++){
		for(int j = casillaAtacada->getY() - rango; j <= casillaAtacada->getY() + rango; j++){
			if(i>=0 && j>=0 && i<=escenario->getAncho() && j<=escenario->getAlto()){
				Casilla* casillaActual = escenario->getCasilla(i,j);
				list<Personaje*> personajesAtacados = casillaActual->getPersonajes();
				cout << "HECHIZO HIELO: Casilla (" << casillaActual->getX() <<
						", " << casillaActual->getY() << "). Tamanio lista: " <<
						personajesAtacados.size() << endl;
				for(list<Personaje*>::iterator it = personajesAtacados.begin(); it != personajesAtacados.end(); it++){
					Personaje* victima = *it;
					cout<<"HECHIZO HIELO: Posible victima "<< victima->getUsuario()
							<< " HECHIZO HIELO: Posicion (" << victima->getX() << ", " <<
							victima->getY() << ")." << endl;

					if(!victima->estaCongelado() && victima->getUsuario().compare(agresor->getUsuario()) != 0 &&
							victima->getUsuario().find("AUTOMATA") != string::npos){
						cout<<"HECHIZO HIELO: congelo a "<<victima->getUsuario();
						victima->setAccion("congelado");
						victima->setCongelado(true);
						//La victima termina su camino
						victima->terminarCamino();
						string accionDefault = victima->getTipo()->getRuta().substr(
						0, victima->getTipo()->getRuta().find("_"));
						accionDefault += "_default";
						victima->setAccion(accionDefault);
						cout << "HECHIZO HIELO: Accion seteada " << accionDefault << endl;
						personajesCongelados.push_back(victima);
					}
				}
			}
		}
	}

	SDL_Delay(10000);

	list<Personaje*>::iterator itCongelados = personajesCongelados.begin();
	for(;itCongelados != personajesCongelados.end(); ++itCongelados){
		Personaje* victima = *itCongelados;
		cout<<"Victima a descongelar "<<victima->getUsuario()<<endl;
		victima->setCongelado(false);
		victima->setAccion(victima->getTipo()->getNombre()+"_default");
		cout << "LA ACCION DESCONGELADA ES " << victima->getTipo()->getNombre()+"_default" << endl;
	}
}
